package com.itbaizhan;

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.URLDecoder;
import java.net.URLEncoder;
/*浏览器每次请求时都会把与当前访问的域名相关的Cookie在请求中提交到服务端。
通过HttpServletRequest对象获取Cookie，返回Cookie数组。
Cookie[] cookies = request.getCookies()*/
/*与CreateCookieServlet.java相关，启动tomcat后，不可以关闭浏览器，再启动tomcat，会
* 获取不到数据，直接重启就可以，因为现在是状态的cookie*/

/*解决Cookie不支持中文
在Cookie中name的值不能使用中文，Value是可以的。但是在Servlet4.0版本
之前Cookie中的Value也是不支持中文存储的，如果存储的数据中含有中文，
代码会直接出现异常。我们可以通过对含有中文的数据重新进行编码来解决该问题。
在Servlet4.0中的Cookie的Value开始支持中文存储。

1java.lang.IllegalArgumentException: Control character in
cookie value or attribute.

URLEncoder.encode("content","code")
将内容按照指定的编码方式做URL编码处理。
URLDecoder.decode("content","code")
将内容按照指定的编码方式做URL解码处理。*/
public class GetCookieDateServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doPost(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //获取cookie对象
        Cookie[] cookies = req.getCookies();

        //浏览器上显示，要设置响应编码
        resp.setContentType("text/plain;charset=utf-8");
        //从cookie中获取数据
        PrintWriter pw = resp.getWriter();
        for(int i=0;i<cookies.length;i++){
            //获取每一个cookie
            Cookie cookie = cookies[i];
            //获取key与value值
            String name = cookie.getName();
            String value = cookie.getValue();
            //pw.println("name: "+name+" value: "+value);
            //URL解码处理  URLDecoder.decode("content","code")
            // Decoder  中文：解码器
            pw.println("name: "+ URLDecoder.decode(name,"utf-8")+" value: "+URLDecoder.decode(value,"utf-8"));
        }
        pw.flush();
        pw.close();
    }
}
